//acw

//https://www.acwing.com/problem/content/3959/

//前缀和

// #include<bits/stdc++.h>
// using namespace std;
// #define all(x) (x).begin(),(x).end()
// #define rall(x) (x).rbegin(),(x).rend()
// const int N=1e5+10;
// #define INF 0x3f3f3f3f;
// typedef long long int ll;
// #define close(); std::ios::sync_with_stdio(false);cin.tie(0),cout.tie(0);
// //----------------------------------------------------------------------------//

// int n;
// int s[N];
// int main()
// {
// 	close();
//     cin>>n;
//     for(int i = 1; i <= n; i ++ )
//     {
//         int x;
//         cin>>x;
//         s[i] = s[i - 1] + x;
//     }

//     if (s[n] % 3) cout<<0<<'\n';//如果不能平均分成三份
//     else
//     {
//         ll res = 0, cnt = 0;
//         for (int j = 2; j < n; j ++ )
//         {
//             if (s[j - 1] == s[n] / 3) cnt ++ ;//cnt记录到当前位置有的前缀和有多少为s[n]/3
//             if (s[j] == s[n] / 3 * 2) res += cnt;
//         }

//         cout<<res<<'\n';
//     }

//     return 0;
// }



#include<bits/stdc++.h>
using namespace std;
#define all(x) (x).begin(),(x).end()
#define rall(x) (x).rbegin(),(x).rend()
const int N=1e5+10;
#define INF 0x3f3f3f3f;
typedef long long int ll;
#define close(); std::ios::sync_with_stdio(false);cin.tie(0),cout.tie(0);
//----------------------------------------------------------------------------//
int n;
int a[N],pre[N],suf[N];

int main()
{
	close();
	cin>>n;
	
	for(int i=1;i<=n;i++) cin>>a[i];

	for(int i=1;i<=n;i++) pre[i]=pre[i-1]+a[i];

	for(int i=n;i>=1;i--) suf[i]=suf[i+1]+a[i];

	if(pre[n]%3!=0) cout<<0<<'\n';
	else
	{
		ll cnt=0,ans=0;
		for(int i=2;i<=n-1;i++)
		{
			if(pre[i-1]==pre[n]/3) cnt++;//cnt记录到当前位置有的前缀和有多少为s[n]/3
			if(suf[i+1]==pre[n]/3) ans+=cnt;
		}

		cout<<ans<<'\n';
	}
	
	return 0;
}